
using System;
using System.Collections.Generic;
using System.Text;
using System.Configuration;
using System.Data;
using System.Data.Common;
using Gman.Entity.Entities;
using Gman.Entity.Interfaces;
using Gman.Common;
using Microsoft.Practices.EnterpriseLibrary.Data;


namespace Gman.Data
{
  //-------------------------------------------------------------------
  //Archivo     : PresupuestoDA.cs
  //Proyecto    : Gman
  //Creacion    : BIS(NombreDesarrollador) 20130226
  //Modificacion: 
  //Descripcion : Clase para capa de datos.
  //-------------------------------------------------------------------
  public class PresupuestoDA : IPresupuesto
  {

  Database db = DatabaseFactory.CreateDatabase();

  //-----------------------------------------------------------------------------------------------
  //Nombre: Listar
  //Objetivo: Retorna una lista de registros de tipo PresupuestoBE  
  //Creacion    : TISI(NombreDesarrollador) 20130226  
  //-----------------------------------------------------------------------------------------------
  public IList<PresupuestoBE> Listar(PresupuestoBE oItem)
  {
    IList<PresupuestoBE> lista = new List<PresupuestoBE>();			
    try
    {				
      DbCommand cmd = db.GetStoredProcCommand("SP_ListarPresupuesto");

      using (IDataReader oR = db.ExecuteReader(cmd))
      {
        lista = MakeUniqueDatos(oR);
      }
      
    }catch (Exception ex){
      throw new Exception("PresupuestoDA.Listar()", ex);
    }
    finally
    {
    }
    return lista;
  }

  //-----------------------------------------------------------------------------------------------
  //Nombre: Obtener
  //Objetivo: Retorna un objeto de Tipo PresupuestoBE  
  //Creacion    : BIS(NombreDesarrollador) 20130226  
  //-----------------------------------------------------------------------------------------------
  public PresupuestoBE Obtener(PresupuestoBE oItem)
  {
    PresupuestoBE itemResult = null;
    try
    {
      DbCommand cmd = db.GetStoredProcCommand("SP_ObtenerPresupuesto",oItem.IDPresupuesto,"");

      using (IDataReader oR = db.ExecuteReader(cmd))
      {
        while (oR.Read())
        {
          itemResult = MakeDatosMapeados(oR);
        }
      }
      return itemResult;
    }
    catch (Exception ex)
    {
      throw new Exception("PresupuestoDA.Obtener()", ex);                  
    }
    finally
    {
    }
  }

  //-----------------------------------------------------------------------------------------------
  //Nombre: Registrar
  //Objetivo: Almacena el registro de un objeto de tipo PresupuestoBE  
  //Creacion    : TISI(NombreDesarrollador) 20130226  
  //----------------------------------------------------------------------------------------------
  public int Registrar(PresupuestoBE oItem)
  { 
    int resultado = 0;
    try
    {
      DbCommand cmd = db.GetStoredProcCommand("SP_RegistrarPresupuesto");						
      db.AddInParameter(cmd, "@IDPresupuesto", DbType.Int64 , oItem.IDPresupuesto);
      db.AddInParameter(cmd, "@IDSede", DbType.Int64 , oItem.IDSede);
      db.AddInParameter(cmd, "@CodPpto", DbType.String, oItem.CodPpto);
      db.AddInParameter(cmd, "@AreaPpto", DbType.String, oItem.AreaPpto);
      db.AddInParameter(cmd, "@SecPpto", DbType.String, oItem.SecPpto);
      db.AddInParameter(cmd, "@ConceptoPpto", DbType.String, oItem.ConceptoPpto);
      db.AddInParameter(cmd, "@PeriodoPpto", DbType.Int32 , oItem.PeriodoPpto);
      db.AddInParameter(cmd, "@MesPpto", DbType.Int32 , oItem.MesPpto);
      db.AddInParameter(cmd, "@ImpPpto", DbType.Double, oItem.ImpPpto);
      db.AddInParameter(cmd, "@EstadoPpto", DbType.Int32 , oItem.EstadoPpto);
      db.AddInParameter(cmd, "@ProyMes01", DbType.Double, oItem.ProyMes01);
      db.AddInParameter(cmd, "@ProyMes02", DbType.Double, oItem.ProyMes02);
      db.AddInParameter(cmd, "@ProyMes03", DbType.Double, oItem.ProyMes03);
      db.AddInParameter(cmd, "@ProyMes04", DbType.Double, oItem.ProyMes04);
      db.AddInParameter(cmd, "@ProyMes05", DbType.Double, oItem.ProyMes05);
      db.AddInParameter(cmd, "@ProyMes06", DbType.Double, oItem.ProyMes06);
      db.AddInParameter(cmd, "@ProyMes07", DbType.Double, oItem.ProyMes07);
      db.AddInParameter(cmd, "@ProyMes08", DbType.Double, oItem.ProyMes08);
      db.AddInParameter(cmd, "@ProyMes09", DbType.Double, oItem.ProyMes09);
      db.AddInParameter(cmd, "@ProyMes10", DbType.Double, oItem.ProyMes10);
      db.AddInParameter(cmd, "@ProyMes11", DbType.Double, oItem.ProyMes11);
      db.AddInParameter(cmd, "@ProyMes12", DbType.Double, oItem.ProyMes12);
      db.AddInParameter(cmd, "@UsuReg", DbType.String, oItem.UsuReg);
      db.AddInParameter(cmd, "@FecReg", DbType.DateTime, oItem.FecReg);
      db.AddInParameter(cmd, "@TermCnxReg", DbType.String, oItem.TermCnxReg);
      db.AddInParameter(cmd, "@UsuMod", DbType.String, oItem.UsuMod);
      db.AddInParameter(cmd, "@fecMod", DbType.DateTime, oItem.fecMod);
      db.AddInParameter(cmd, "@TermCnxMod", DbType.String, oItem.TermCnxMod);
      db.AddInParameter(cmd, "@IDEmp", DbType.Int32 , oItem.IDEmp);
      
      resultado = db.ExecuteNonQuery(cmd);      

    }
    catch (Exception ex)
    {
      throw new Exception("PresupuestoDA.Registrar()", ex);
    }
    finally
    {

    }
    return resultado;
  }

  //-----------------------------------------------------------------------------------------------
  //Nombre: Actualizar
  //Objetivo: Actualiza el registro de un objeto de tipo PresupuestoBE 
  //Creacion    : TISI(NombreDesarrollador) 20130226  
  //-----------------------------------------------------------------------------------------------
  public int Actualizar(PresupuestoBE oItem)
  {
    int resultado = 0;
    try
    {
      DbCommand cmd = db.GetStoredProcCommand("SP_ActualizarPresupuesto");						
      db.AddInParameter(cmd, "@IDPresupuesto", DbType.Int64 , oItem.IDPresupuesto);
      db.AddInParameter(cmd, "@IDSede", DbType.Int64 , oItem.IDSede);
      db.AddInParameter(cmd, "@CodPpto", DbType.String, oItem.CodPpto);
      db.AddInParameter(cmd, "@AreaPpto", DbType.String, oItem.AreaPpto);
      db.AddInParameter(cmd, "@SecPpto", DbType.String, oItem.SecPpto);
      db.AddInParameter(cmd, "@ConceptoPpto", DbType.String, oItem.ConceptoPpto);
      db.AddInParameter(cmd, "@PeriodoPpto", DbType.Int32 , oItem.PeriodoPpto);
      db.AddInParameter(cmd, "@MesPpto", DbType.Int32 , oItem.MesPpto);
      db.AddInParameter(cmd, "@ImpPpto", DbType.Double, oItem.ImpPpto);
      db.AddInParameter(cmd, "@EstadoPpto", DbType.Int32 , oItem.EstadoPpto);
      db.AddInParameter(cmd, "@ProyMes01", DbType.Double, oItem.ProyMes01);
      db.AddInParameter(cmd, "@ProyMes02", DbType.Double, oItem.ProyMes02);
      db.AddInParameter(cmd, "@ProyMes03", DbType.Double, oItem.ProyMes03);
      db.AddInParameter(cmd, "@ProyMes04", DbType.Double, oItem.ProyMes04);
      db.AddInParameter(cmd, "@ProyMes05", DbType.Double, oItem.ProyMes05);
      db.AddInParameter(cmd, "@ProyMes06", DbType.Double, oItem.ProyMes06);
      db.AddInParameter(cmd, "@ProyMes07", DbType.Double, oItem.ProyMes07);
      db.AddInParameter(cmd, "@ProyMes08", DbType.Double, oItem.ProyMes08);
      db.AddInParameter(cmd, "@ProyMes09", DbType.Double, oItem.ProyMes09);
      db.AddInParameter(cmd, "@ProyMes10", DbType.Double, oItem.ProyMes10);
      db.AddInParameter(cmd, "@ProyMes11", DbType.Double, oItem.ProyMes11);
      db.AddInParameter(cmd, "@ProyMes12", DbType.Double, oItem.ProyMes12);
      db.AddInParameter(cmd, "@UsuReg", DbType.String, oItem.UsuReg);
      db.AddInParameter(cmd, "@FecReg", DbType.DateTime, oItem.FecReg);
      db.AddInParameter(cmd, "@TermCnxReg", DbType.String, oItem.TermCnxReg);
      db.AddInParameter(cmd, "@UsuMod", DbType.String, oItem.UsuMod);
      db.AddInParameter(cmd, "@fecMod", DbType.DateTime, oItem.fecMod);
      db.AddInParameter(cmd, "@TermCnxMod", DbType.String, oItem.TermCnxMod);
      db.AddInParameter(cmd, "@IDEmp", DbType.Int32 , oItem.IDEmp);
      
      resultado = db.ExecuteNonQuery(cmd);

    }
    catch (Exception ex)
    {
      throw new Exception("PresupuestoDA.Actualizar()", ex);
    }
    finally
    {

    }
    return resultado;
  }

  //-----------------------------------------------------------------------------------------------
  //Nombre: Eliminar
  //Objetivo: Elimina el registro de un objeto de tipo PresupuestoBE  
  //Creacion    : BIS(NombreDesarrollador) 20130226  
  //-----------------------------------------------------------------------------------------------
  public int Eliminar(PresupuestoBE oItem)
  {
    int resultado = 0;
    try
    {
      DbCommand cmd = db.GetStoredProcCommand("SP_EliminarPresupuesto");						
      db.AddInParameter(cmd, "@IDPresupuesto", DbType.Int64 , oItem.IDPresupuesto);
      

      resultado = db.ExecuteNonQuery(cmd);      

    }
    catch (Exception ex)
    {
      throw new Exception("PresupuestoDA.Eliminar()", ex);
  }
  finally
  {

  }
  return resultado;
  }  

  private IList<PresupuestoBE> MakeUniqueDatos(IDataReader oR)
  {
    IList<PresupuestoBE> list = new List<PresupuestoBE>();

    while (oR.Read())
      list.Add(MakeDatosMapeados(oR));

    return list;
  }

  private PresupuestoBE MakeDatosMapeados(IDataReader oR)
  {
    var itemResult = new PresupuestoBE();
    
      itemResult.IDPresupuesto= oR["IDPresupuesto"].ToInt64();
      itemResult.IDSede= oR["IDSede"].ToInt64();
      itemResult.CodPpto= oR["CodPpto"].ToString();
      itemResult.AreaPpto= oR["AreaPpto"].ToString();
      itemResult.SecPpto= oR["SecPpto"].ToString();
      itemResult.ConceptoPpto= oR["ConceptoPpto"].ToString();
      itemResult.PeriodoPpto= oR["PeriodoPpto"].ToInt32();
      itemResult.MesPpto= oR["MesPpto"].ToInt32();
      itemResult.ImpPpto= oR["ImpPpto"].ToDecimal();
      itemResult.EstadoPpto= oR["EstadoPpto"].ToInt32();
      itemResult.ProyMes01= oR["ProyMes01"].ToDecimal();
      itemResult.ProyMes02= oR["ProyMes02"].ToDecimal();
      itemResult.ProyMes03= oR["ProyMes03"].ToDecimal();
      itemResult.ProyMes04= oR["ProyMes04"].ToDecimal();
      itemResult.ProyMes05= oR["ProyMes05"].ToDecimal();
      itemResult.ProyMes06= oR["ProyMes06"].ToDecimal();
      itemResult.ProyMes07= oR["ProyMes07"].ToDecimal();
      itemResult.ProyMes08= oR["ProyMes08"].ToDecimal();
      itemResult.ProyMes09= oR["ProyMes09"].ToDecimal();
      itemResult.ProyMes10= oR["ProyMes10"].ToDecimal();
      itemResult.ProyMes11= oR["ProyMes11"].ToDecimal();
      itemResult.ProyMes12= oR["ProyMes12"].ToDecimal();
      itemResult.UsuReg= oR["UsuReg"].ToString();
      itemResult.FecReg= oR["FecReg"].ToDateTime();
      itemResult.TermCnxReg= oR["TermCnxReg"].ToString();
      itemResult.UsuMod= oR["UsuMod"].ToString();
      itemResult.fecMod= oR["fecMod"].ToDateTime();
      itemResult.TermCnxMod= oR["TermCnxMod"].ToString();
      itemResult.IDEmp= oR["IDEmp"].ToInt32();
  
    return itemResult;
  }
 }
}
